/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controlador;

import Conexion.Conexion;
import Modelo.SIS_LOG;
import Modelo.SIS_PERFILES;
import Modelo.SIS_PERFILES_ROLES;
import Modelo.SIS_PROCESO_ROLES;
import Modelo.SIS_ROLES;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "SIS_PERFILES_CONTROLLER", urlPatterns = {"/SIS_PERFILES_CONTROLLER"})
public class SIS_PERFILES_CONTROLLER extends HttpServlet {
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String proceso=request.getParameter("proceso");
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String html="";
            switch(proceso){
                case "GuardarNuevo":
                    html=GuardarNuevo(request,con, usuario);
                    break;
                case "seleccionarSubMenu":
                    html=seleccionarSubMenu(con,request);
                    break;
                    
                case "quitarAgregarRoll":
                    html=quitarAgregarRoll(con,request,usuario);
                    break;
                case "buscarText":
                    html=buscarText(con,request,usuario);
                    break;
                case "Eliminar":
                    html=eliminarPerfil(con,request, usuario);
                    break;
            }
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            con.Close();
        } catch (SQLException ex) {
            Logger.getLogger(SIS_PERFILES_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }
    public String eliminarPerfil(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException{
        int id = Integer.parseInt(request.getParameter("Eliminar"));
        SIS_PERFILES sis_proceso = new SIS_PERFILES();
        sis_proceso.setCon(con);
        sis_proceso = sis_proceso.BuscarXid(id);
        if(sis_proceso.EliminarXid())
            SIS_LOG.LOG(usuario.getID(), 1, "ELIMINO EL PERFIL "+sis_proceso.getDESCRIPCION(), con);
        return actualizarPerfil(con);
    }
    public String buscarText(Conexion con, HttpServletRequest request,RHH_USUARIO usuario ){
        Double IdSubMenu = Double.parseDouble(request.getParameter("IdSubMenu"));
        String desc = request.getParameter("desc");
        String tipo = request.getParameter("tipo");
        SIS_ROLES sis_roles = new SIS_ROLES();
        sis_roles.setCon(con);
        SIS_PERFILES_ROLES spr = new SIS_PERFILES_ROLES();
        spr.setCon(con);
        SIS_PROCESO_ROLES sis_proceso_roles = new SIS_PROCESO_ROLES();
        sis_proceso_roles.setCon(con);
        String html="";
        if(tipo.equals("Inactivo")){
            List<SIS_ROLES> ListaInactivos = sis_roles.buscarTodosLosInactivos(IdSubMenu,desc);
            for(int i = 0; i<ListaInactivos.size(); i++)
            {
                html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' data-idRol="+ListaInactivos.get(i).getID()+">"
                        + ListaInactivos.get(i).getDESCRIPCION()
                        +"</div>";
            }
        }else{
            List<SIS_PERFILES_ROLES> ListaActivos = spr.buscarTodosLosActivos(IdSubMenu,desc);
            html="";
            for(int i = 0; i<ListaActivos.size(); i++)
            {
                sis_roles = sis_roles.BuscarXid(ListaActivos.get(i).getID_ROLES());
                html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='activo' data-idRol="+ListaActivos.get(i).getID_ROLES()+">"
                        + sis_roles.getDESCRIPCION()
                        +"</div>";
            }
        }
        return html;
    }
    public String quitarAgregarRoll(Conexion con, HttpServletRequest request,RHH_USUARIO usuario ) throws SQLException{
        SIS_PERFILES_ROLES proc_rol = new SIS_PERFILES_ROLES();
        proc_rol.setCon(con);
        double idPerfil = Double.parseDouble(request.getParameter("IdSubMenu"));
        double idrol = Double.parseDouble(request.getParameter("idRol"));
        try
        {
            proc_rol=proc_rol.BuscarXid(idrol, idPerfil);
            proc_rol.Desabilitar(idrol, idPerfil);
            SIS_ROLES sis = new SIS_ROLES();
            sis.setCon(con);
            sis = sis.BuscarXid(idrol);
            SIS_PERFILES sis2 = new SIS_PERFILES();
            sis2.setCon(con);
            sis2 = sis2.BuscarXid(idPerfil);
            
            SIS_LOG.LOG(usuario.getID(), 1, "QUITO EL ROL "+sis.getDESCRIPCION()+" DE EL PERFIL "+sis2.getDESCRIPCION(), con);
        }
        catch(Exception ex)
        {
            proc_rol = new SIS_PERFILES_ROLES();
            proc_rol.setCon(con);
            proc_rol.Abilitar(idrol, idPerfil);
            SIS_ROLES sis = new SIS_ROLES();
            sis.setCon(con);
            sis = sis.BuscarXid(idrol);
            
            SIS_PERFILES sis2 = new SIS_PERFILES();
            sis2.setCon(con);
            sis2 = sis2.BuscarXid(idPerfil);
            
            SIS_LOG.LOG(usuario.getID(), 1, "AGREGO EL ROL "+sis.getDESCRIPCION()+" A EL PERFIL "+sis2.getDESCRIPCION(), con);
            con.commit();
        }
        return seleccionarSubMenu(con, request);
    }
    
    
    
    public String seleccionarSubMenu(Conexion con, HttpServletRequest request){
        Double IdSubMenu = Double.parseDouble(request.getParameter("IdSubMenu"));
        SIS_PERFILES sis_perfiles = new SIS_PERFILES();
        sis_perfiles.setCon(con);
        
        sis_perfiles = sis_perfiles.BuscarXid(IdSubMenu);
        SIS_ROLES sis_roles = new SIS_ROLES();
        sis_roles.setCon(con);
        List<SIS_ROLES> ListaInactivos = sis_roles.TodosLosInactivos(sis_perfiles.getID());
        SIS_PERFILES_ROLES spr = new SIS_PERFILES_ROLES();
        spr.setCon(con);
        List<SIS_PERFILES_ROLES> ListaActivos = spr.TodosLosActivos(sis_perfiles.getID());
        String html="<div class='contenedor50 c1' style=\"border-right: solid white thin;\" data-estado='inactivo'>";
        for(int i = 0; i<ListaInactivos.size(); i++)
        {
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' data-idRol="+ListaInactivos.get(i).getID()+">"
                    + ListaInactivos.get(i).getDESCRIPCION()
                    +"</div>";
        }
        html+="</div><div class='contenedor50 c2' data-estado='activo'>"
                ;
        for(int i = 0; i<ListaActivos.size(); i++)
        {
            sis_roles = sis_roles.BuscarXid(ListaActivos.get(i).getID_ROLES());
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='activo' data-idRol="+ListaActivos.get(i).getID_ROLES()+">"
                    + sis_roles.getDESCRIPCION()
                    +"</div>";
        }
        html+="</div>";
        return html;
    }
    public String actualizarPerfil(Conexion con){
        SIS_PERFILES sis_perfiles = new SIS_PERFILES();
        sis_perfiles.setCon(con);
        List<SIS_PERFILES> Lista = sis_perfiles.Todos();
        String html="";
        for(int i =0; i<Lista.size(); i++)
        {
            html+="<span  class=\"subMenu\" data-value=\'"+Lista.get(i).getID()+"\'>"+Lista.get(i).getDESCRIPCION()+"  <span class='btnEliminar' onclick=\"eliminarPerfil("+Lista.get(i).getID()+")\">X</span></span><br/>";
        }
        return html;
    }
    public String GuardarNuevo(HttpServletRequest request, Conexion con, RHH_USUARIO usr){
        String desc = request.getParameter("descripcion");
        SIS_PERFILES sis_proceso = new SIS_PERFILES(0, desc);
        sis_proceso.setCon(con);
        if(sis_proceso.Insertar())
            SIS_LOG.LOG(usr.getID(), 1, "CREO EL PERFIL "+desc, con);
        return actualizarPerfil(con);
    }
    
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
